package com.hung.trade.coupon.service.impl;

import com.hung.trade.common.constants.TradeEnums;
import com.hung.trade.common.exception.CouponException;
import com.hung.trade.common.protocol.coupon.ChangeCouponReq;
import com.hung.trade.common.protocol.coupon.ChangeCouponResp;
import com.hung.trade.common.protocol.coupon.QueryCouponReq;
import com.hung.trade.common.protocol.coupon.QueryCouponResp;
import com.hung.trade.coupon.service.ICouponService;
import com.hung.trade.dao.mapper.TradeCouponMapper;
import com.hung.trade.dao.pojo.TradeCoupon;
import com.hung.trade.dao.pojo.TradeCouponExample;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @author hungki
 * @createTime 2018-10-09 下午 2:56
 */
@Service
public class CouponServiceImpl implements ICouponService {
    @Autowired
    private TradeCouponMapper tradeCouponMapper;

    @Override
    @Transactional(readOnly = true)
    public QueryCouponResp queryCoupon(QueryCouponReq queryCouponReq) {
        QueryCouponResp resp = new QueryCouponResp();

        if(null== queryCouponReq || queryCouponReq.getCouponId()==null){
            throw new CouponException("参数不正确");
        }
        TradeCouponExample example =new TradeCouponExample();
        example.createCriteria().andCouponIdEqualTo(queryCouponReq.getCouponId());
        List<TradeCoupon> list =tradeCouponMapper.selectByExample(example);
        if(list ==null || list.size()==0){
            throw new CouponException("没有查到数据");
        }
        // TODO ,仅返回第一条，不想在写一个查询单条的方法了，查询多个的方法，这里也用不到
        BeanUtils.copyProperties(list.get(0),resp);
        return resp;

    }

    @Override
    @Transactional
    public ChangeCouponResp changeCoupon(ChangeCouponReq changeCouponReq) {
        ChangeCouponResp resp = new ChangeCouponResp();

        if(null==changeCouponReq || StringUtils.isBlank(changeCouponReq.getCouponId())){
            throw new CouponException("参数不正确");
        }

        //使用优惠券
        TradeCoupon tradeCoupon=new TradeCoupon();
        tradeCoupon.setOrderId(changeCouponReq.getOrderId());
        tradeCoupon.setUserId(changeCouponReq.getUserId());
        tradeCoupon.setCouponId(changeCouponReq.getCouponId());
        tradeCoupon.setIsUsed(changeCouponReq.getIsUsed());
        int i=0;
        if(changeCouponReq.getIsUsed().equals(TradeEnums.YesNoEnum.YES.getCode())){
            i = tradeCouponMapper.useCoupon(tradeCoupon);
            if(i<=0){
                throw new CouponException("更新数据条数为0，使用优惠券失败");
            }
        }else if(changeCouponReq.getIsUsed().equals(TradeEnums.YesNoEnum.NO.getCode())){
            i = tradeCouponMapper.unUseCoupon(tradeCoupon);
            if(i<=0){
                throw new CouponException("刚更新数据条数为0，取消使用优惠券失败");
            }
        }


        return resp;

    }
}
